package
{
	import flash.display.*;
	import flash.events.*;
	import flash.text.TextField;
	import flash.ui.Keyboard;
	
	/**
	 * Classe associée à la scène
	 * @author Anthony et Oussama
	 */
	public class Main extends MovieClip
	{
		// Boutons instanciés dans le FLA
		public var btnJouer:SimpleButton;
		public var btnReprendre:SimpleButton;
		public var btnRetourMenu:SimpleButton;
		public var btnGameOver:SimpleButton;
		public var texteScore:TextField;
		public var textePause:TextField;
		public var texteLevel:TextField;
		
		// Textes
		public const PAUSE_OFF = "\"P\" pour mettre en pause";
		public const PAUSE_ON = "Quitter la partie ? O/N";
		
		public var partie:Partie;
		
		public function Main()
		{
			partie = new Partie(this);
			
			btnJouer.addEventListener(MouseEvent.MOUSE_UP, clicBtnJouer);
			
			stop();
		}
		
		public function getTexteScore():TextField
		{
			return texteScore;
		}
		
		// =====================================================================
		// Listeners
		
		/**
		 * Bouton Jouer : aller à l'écran de jeu
		 * @param	e
		 */
		private function clicBtnJouer(e:MouseEvent):void
		{
			trace("clicBtnJouer");
			
			gotoAndStop("EcranJeu");
			
			// Démarrer jeu
			partie.startMap();
			
			// Attacher les listeners de jeu
			attacherListenersJeu();
			
			/*
			var map:Map = new Map("../map/niveau3.xml", "Niveau 1", 1);
			map.charger();
			map.x = 27;
			map.y = 40;
			stage.addChild(map);*/
		}
		
		/**
		 * Bouton Reprendre partie : fin pause
		 * @param	e
		 */
		private function clicBtnReprendre(e:MouseEvent):void
		{
			trace("clicBtnReprendre");
			gotoAndStop("EcranJeu"); //xxx
		
		}
		
		/**
		 * Bouton Retour Menu : retour à l'écran principal
		 * @param	e
		 */
		private function clicBtnRetourMenu(e:MouseEvent):void
		{
			gotoAndStop("clicBtnRetourMenu");
			btnJouer.addEventListener(MouseEvent.MOUSE_UP, clicBtnJouer);
		
			//detacherListenersJeu();
		}
		
		/**
		 * Bouton Game Over : retour à l'écran principal
		 * @param	e
		 */
		private function clicBtnGameOver(e:MouseEvent):void
		{
			trace("clicBtnGameOver");
			gotoAndStop("EcranGameOver");
		
			//detacherListenersJeu();
		}
		
		private function gestionClavier(e:KeyboardEvent):void
		{
			trace("gestionClavier: KeyCode = " + e.keyCode);
			switch (e.keyCode)
			{
				// Pause activée : P
				case 80:
					//gotoAndStop("EcranPause");
					//btnReprendre.addEventListener(MouseEvent.MOUSE_UP, clicBtnReprendre);
					//btnRetourMenu.addEventListener(MouseEvent.MOUSE_UP, clicBtnRetourMenu);
					
					partie.setPause(true);
					
					textePause.text = PAUSE_ON;
					
					break;
					
				// Quitter la pause et retourner au menu
				case 79: // O
					partie.resetPartie();
					gotoAndStop("EcranMenu");
					btnJouer.addEventListener(MouseEvent.MOUSE_UP, clicBtnJouer);
					break;
					
				// Reprendre la partie
				case 78: // N
					partie.setPause(false);
					textePause.text = PAUSE_OFF;
					break;
					
				// DEBUG : aller au niveau précédent
				case 65: // A
					partie.niveauPrecedent();
					break;
					
				// DEBUG : aller au niveau suivant
				case 90: // Z
					partie.niveauSuivant();
					break;
					
				// DEBUG : ajouter score
				case Keyboard.NUMPAD_ADD:
					partie.plusGomme();
					break;
					
				case Keyboard.UP:
					partie.mapCourante.pacman.changerDirection(Direction.NORD);
					break;
				
				case Keyboard.DOWN:
					partie.mapCourante.pacman.changerDirection(Direction.SUD);
					break;
				
				case Keyboard.LEFT:
					partie.mapCourante.pacman.changerDirection(Direction.WEST);
					break;
				
				case Keyboard.RIGHT:
					partie.mapCourante.pacman.changerDirection(Direction.EAST);
					break;
					
				default:
					break;
					
			}
		}
		
		private function attacherListenersJeu():void
		{
			trace("attacherListenersJeu");
			stage.addEventListener(KeyboardEvent.KEY_DOWN, gestionClavier);
		
			// à compléter : touches flèches, ...
		}
		
		private function detacherListenersJeu():void
		{
			trace("detacherListenersJeu");
			stage.removeEventListener(KeyboardEvent.KEY_DOWN, gestionClavier);
		
			// compléter idem attacher
		}
	
	}

}